翻訳と辞書
Words near each other
・ Name conflict
・ Name conflicts with minor planets
・ Name day
・ Name days in Bulgaria
・ Name days in Croatia
・ Name days in France
・ Name days in Greece
・ Name days in Hungary
・ Name days in Poland
・ Name days in Slovakia
・ Name days in Sweden
・ Name days in the Czech Republic
・ Name generator
・ Name Is 4Minute
・ Name It and Frame It?
Name mangling
・ Name of Afghanistan
・ Name of Argentina
・ Name of Armenia
・ Name of Australia
・ Name of Austria
・ Name of Brazil
・ Name of Canada
・ Name of Christ
・ Name of Croatia
・ Name of France
・ Name of Galicia
・ Name of Georgia
・ Name of Greece
・ Name of Hungary


Dictionary Lists
翻訳と辞書 辞書検索 [ 開発暫定版 ]
スポンサード リンク

Name mangling : ウィキペディア英語版
Name mangling

In compiler construction, name mangling (also called name decoration) is a technique used to solve various problems caused by the need to resolve unique names for programming entities in many modern programming languages.
It provides a way of encoding additional information in the name of a function, structure, class or another datatype in order to pass more semantic information from the compilers to linkers.
The need arises where the language allows different entities to be named with the same identifier as long as they occupy a different namespace (where a namespace is typically defined by a module, class, or explicit ''namespace'' directive) or have different signatures (such as function overloading).
Any object code produced by compilers is usually linked with other pieces of object code (produced by the same or another compiler) by a type of program called a linker. The linker needs a great deal of information on each program entity. For example, to correctly link a function it needs its name, the number of arguments and their types, and so on.
==C name decoration in Microsoft Windows==
Although name mangling is not generally required or used by languages that do not support function overloading (such as C and classic Pascal), they use it in some cases to provide additional information about a function.
For example, compilers targeted at Microsoft Windows platforms support a variety of calling conventions, which determine the manner in which parameters are sent to subroutines and results returned. Because the different calling conventions are not compatible with one another, compilers mangle symbols with codes detailing which convention should be used to call the specific routine.
The mangling scheme was established by Microsoft, and has been informally followed by other compilers including Digital Mars, Borland, and GNU GCC, when compiling code for the Windows platforms. The scheme even applies to other languages, such as Pascal, D, Delphi, Fortran, and C#. This allows subroutines written in those languages to call, or be called by, existing Windows libraries using a calling convention different from their default.
When compiling the following C examples:

int _cdecl f (int x)
int _stdcall g (int y)
int _fastcall h (int z)

32 bit compilers emit, respectively:
_f
_g@4
@h@4
In the stdcall and fastcall mangling schemes, the function is encoded as _name@X and @name@X respectively, where X is the number of bytes, in decimal, of the argument(s) in the parameter list (including those passed in registers, for fastcall). In the case of cdecl, the function name is merely prefixed by an underscore.
Note that the 64-bit convention on Windows (Microsoft C) has no leading underscore. This difference may in some rare cases lead to unresolved externals when porting such code to 64 bits. For example, Fortran code can use 'alias' to link against a C method by name as follows:

SUBROUTINE f()
!DEC$ ATTRIBUTES C, ALIAS:'_f' :: f
END SUBROUTINE

This will compile and link fine under 32 bits, but generate an unresolved external '_f' under 64 bits. One work around for this is to not use 'alias' at all (in which the method names typically need to be capitalized in C and Fortran), or to use the BIND option:

SUBROUTINE f() BIND(C,NAME="f")
END SUBROUTINE



抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)
ウィキペディアで「Name mangling」の詳細全文を読む



スポンサード リンク
翻訳と辞書 : 翻訳のためのインターネットリソース

Copyright(C) kotoba.ne.jp 1997-2016. All Rights Reserved.